add_emoji (GtkWidget *box,
gboolean prepend,
GVariant *item,
- gunichar modifier);
+ gunichar modifier,
+ GtkEmojiChooser *chooser);
#define MAX_RECENT (7*3)
emoji_data = g_variant_get_child_value (item, 0);
g_variant_get_child (item, 1, "u", &modifier);
- add_emoji (chooser->recent.box, FALSE, emoji_data, modifier);
+ add_emoji (chooser->recent.box, FALSE, emoji_data, modifier, chooser);
g_variant_unref (emoji_data);
g_variant_unref (item);
}
}
g_list_free (children);
- add_emoji (chooser->recent.box, TRUE, item, modifier);
+ add_emoji (chooser->recent.box, TRUE, item, modifier, chooser);
g_settings_set_value (chooser->settings, "recent-emoji", g_variant_builder_end (&builder));
g_signal_connect (box, "child-activated", G_CALLBACK (emoji_activated), parent_popover);
- add_emoji (box, FALSE, emoji_data, 0);
+ add_emoji (box, FALSE, emoji_data, 0, NULL);
for (modifier = 0x1f3fb; modifier <= 0x1f3ff; modifier++)
- add_emoji (box, FALSE, emoji_data, modifier);
+ add_emoji (box, FALSE, emoji_data, modifier, NULL);
gtk_widget_show_all (view);
gtk_popover_popup (GTK_POPOVER (popover));
show_variations (chooser, child);
}
+static gboolean
+popup_menu (GtkWidget *widget,
+ gpointer data)
+{
+ GtkEmojiChooser *chooser = data;
+
+ show_variations (chooser, widget);
+ return TRUE;
+}
+
static void
add_emoji (GtkWidget *box,
gboolean prepend,
GVariant *item,
- gunichar modifier)
+ gunichar modifier,
+ GtkEmojiChooser *chooser)
{
GtkWidget *child;
GtkWidget *ebox;
gtk_container_add (GTK_CONTAINER (child), ebox);
gtk_container_add (GTK_CONTAINER (ebox), label);
gtk_widget_show_all (child);
+
+ if (chooser)
+ g_signal_connect (child, "popup-menu", G_CALLBACK (popup_menu), chooser);
+
gtk_flow_box_insert (GTK_FLOW_BOX (box), child, prepend ? 0 : -1);
}
else if (strcmp (name, chooser->flags.first) == 0)
box = chooser->flags.box;
- add_emoji (box, FALSE, item, 0);
+ add_emoji (box, FALSE, item, 0, chooser);
g_variant_unref (item);
}